Problem s TCP komunikaci

Otázka od: Antonin Rezac

2. 6. 2004 14:47

Zdravim,
mam dve aplikce ("server" a "klient"), ktere spolu komunikuji pomoci
jednoducheho protokolu ( dotaz -> odpoved -> potrvzeni ). Pouzivam
TClientSocket a TServerSocket v Blocking rezimu. Vzhledem k tomu, ze
komunikace probiha min. 1x za sek., nechavam socket stale otevreny. Nahodne
se stava, ze klient odesle dotaz, ale server ho nedostane. Socket na obou
stranach se tvari, ze je aktivni, zadne chyby nehlasi. Opakovane odeslani
dotazu uz neprojde (Stream.Write = 0 ). Pokud obe aplikace bezi na jednom
PC, tento problem nastava hooodne vyjimecne (na 7 sledovanych mistech za
posledni 3 mesice 2x), pokud vsak na ruznych, je to castejsi (Udelal jsem si
testovaci aplikaci a na jednom PC 200 000 cyklu bez problemu, na ruznych PC
jsem se pres 10 000 cyklu nedostal). V cem muze byt problem ?

P.S: Vyresim to asi tak, ze po teto chybe uzavru a opetovne otevru socket
(viz. oblibeny vtip ... vystoupime, nastoupime a treba se to auto rozjede),
ale takove reseni nemam rad.

A.Rezac

D6Ent, WinXP, Win2000


Odpovedá: Dalibor Toman

2. 6. 2004 17:37

On Wednesday, June 02, 2004 3:46 PM [CET], Antonin Rezac
<rezac@apls.cz> wrote:

> Zdravim,
> mam dve aplikce ("server" a "klient"), ktere spolu komunikuji pomoci
> jednoducheho protokolu ( dotaz -> odpoved -> potrvzeni ). Pouzivam
> TClientSocket a TServerSocket v Blocking rezimu. Vzhledem k tomu, ze
> komunikace probiha min. 1x za sek., nechavam socket stale otevreny.
> Nahodne se stava, ze klient odesle dotaz, ale server ho nedostane.
> Socket na obou stranach se tvari, ze je aktivni, zadne chyby
nehlasi.
> Opakovane odeslani dotazu uz neprojde (Stream.Write = 0 ). Pokud
> obe aplikace bezi na jednom PC, tento problem nastava hooodne
> vyjimecne (na 7 sledovanych mistech za posledni 3 mesice 2x), pokud
> vsak na ruznych, je to castejsi (Udelal jsem si testovaci aplikaci a
> na jednom PC 200 000 cyklu bez problemu, na ruznych PC jsem se pres
> 10 000 cyklu nedostal). V cem muze byt problem ?
>

zrejme nejakej problem v komponente nebo zpusobu jejicho pouziti. U
takovehle jednoduche kominikace je pomerne trivialni vyhnout se
komponentam a pouzit WinSock API primo. Jednak je to mnohem lepe
dokumentovane a jednak se mnohem lepe zjistuje co to vlastne dela
(resp. nedela)...

Zdravi
D. Toman


Odpovedá: Tomas Bradle

3. 6. 2004 19:22

No me originalni TClientSocket a TServerSocket blbly (posilal jsem pres ne
JPEG soubor, ktery prisel cca o 10% vetsi nez zdroj), teda pri asynch.
rezimu. Pouzil jsem Synapsi (TTCPBlockSocket) a Thready a vsechno je OK.

Tomas Bradle
t.bradle@worldonline.cz



----- Original Message -----
From: "Antonin Rezac" <rezac@apls.cz>
To: <delphi-l@clexpert.cz>
Sent: Wednesday, June 02, 2004 3:46 PM
Subject: Problem s TCP komunikaci


> Zdravim,
> mam dve aplikce ("server" a "klient"), ktere spolu komunikuji pomoci
> jednoducheho protokolu ( dotaz -> odpoved -> potrvzeni ). Pouzivam
> TClientSocket a TServerSocket v Blocking rezimu. Vzhledem k tomu, ze
> komunikace probiha min. 1x za sek., nechavam socket stale otevreny.
Nahodne
> se stava, ze klient odesle dotaz, ale server ho nedostane. Socket na obou
> stranach se tvari, ze je aktivni, zadne chyby nehlasi. Opakovane odeslani
> dotazu uz neprojde (Stream.Write = 0 ). Pokud obe aplikace bezi na
jednom
> PC, tento problem nastava hooodne vyjimecne (na 7 sledovanych mistech za
> posledni 3 mesice 2x), pokud vsak na ruznych, je to castejsi (Udelal jsem
si
> testovaci aplikaci a na jednom PC 200 000 cyklu bez problemu, na ruznych
PC
> jsem se pres 10 000 cyklu nedostal). V cem muze byt problem ?
>
> P.S: Vyresim to asi tak, ze po teto chybe uzavru a opetovne otevru socket
> (viz. oblibeny vtip ... vystoupime, nastoupime a treba se to auto
rozjede),
> ale takove reseni nemam rad.
>
> A.Rezac
>
> D6Ent, WinXP, Win2000
>
>
>